oracle exp调过坏块,ORA |
您所在的位置:网站首页 › oracle 跳过坏块 › oracle exp调过坏块,ORA |
ORA-01578: ORACLE 数据块损坏(文件号4,块号293465) ORA-01110: 数据文件4: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' 坏块处理有3种通用的办法: 备份好用情况: 1 blockrecover 备份不可用情况: 2 dbms_repair.SKIP_CORRUPT_BLOCKS标记跳过坏块 3 Oracle 10231内部事件跳过坏块 exp导出数据 验证坏块,cmd窗口下执行 dbv file=D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF blocksize=8192 logfile='D:\dbv.log' 查询确定文件号和块号 select * from v$database_block_corruption; >rman target / RMAN> blockrecover datafile 4 block 293465; 方法1: 出现ora-1578时,大多时候可以用过rman命令blockrecover datafile 4 block 293465from backupset;来恢复坏块,但有时候往往因为介质的损坏而无法修复,只能导出数据重新建表,此时exp或扫描表是无法正常的。 使用命令检查损坏的是否为普通数据。 SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents WHERE file_id = 4 and 293465 between block_id AND block_id + blocks - 1 方法2: 然后用10231该命令设置全表扫描时跳过坏块。 ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10'; 也可以alter session在session级中使用,然后通过 create table as select的方式来拯救数据(当然会有数据损失)。 比对问题表和新表数据条数,查看丢失数据条数 exp 导出新表数据 drop table t1 purge; 彻底删除问题表 imp导入新表数据,然后将其改名为问题表同名即可。 也可不创建新表,直接10231跳过坏块后exp导出问题表数据。 方法3: 另外一种方法是使用SKIP_CORRUPT_BLOCKS标记,方法为使用命令 SQL> alter session set db_file_multiblock_read_count=1; SQL> execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('NEWDOCHNZZ','T_PATIENT_DOC_COLB'); SQL> create table abak as select * from T_PATIENT_DOC_COLB ; 收集剩下的信息。 最后清除这个标记。 SQL> execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('NEWDOCHNZZ','T_PATIENT_DOC_COLB',flags=>dbms_repair.noskip_flag); 关于坏块的metalink文档如下: RELATED DOCUMENTS ----------------- - TECH: Database Block Checking Features - Handling Oracle Block Corruptions in Oracle7/8/8i/9i - Handling Rollback Segment Corruptions in Oracle7.3 to 8.1.7 - Extracting Data from a Corrupt Table using SKIP_CORRUPT_BLOCKS or Event 10231 - ORA-1578 ORACLE data block corrupted (file # %s, block # %s) - Parameter DIRECT: Conventional Path Export Versus Direct Path Export |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |